package com.ruoyi.admin.service.api.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.ruoyi.admin.domain.ApiToken;
import com.ruoyi.admin.domain.LlmFaq;
import com.ruoyi.admin.mapper.ApiTokenMapper;
import com.ruoyi.admin.service.api.ApiTokenService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;


@Slf4j
@Service
@RequiredArgsConstructor
public class ApiServiceImpl implements ApiTokenService {

    private final ApiTokenMapper apiTokenMapper;

    @Override
    public boolean genApiKey(ApiToken apiToken) {
        prepareApiToken(apiToken);
        return saveApiToken(apiToken);
    }

    private void prepareApiToken(ApiToken apiToken) {
        String id = IdUtils.fastSimpleUUID();
        String tokenType = IdUtils.simpleUUID();
        String createTime = DateUtils.getTime();

        apiToken.setId(id)
                .setTokenType(tokenType)
                .setCreateTime(createTime);
    }

    public boolean saveApiToken (ApiToken apiToken) {
        int inserted = apiTokenMapper.insert(apiToken);
        return inserted > 0;
    }

    @Override
    public ApiToken getApiKey(String tokenType) {
        LambdaQueryWrapper<ApiToken> apiTokenQueryWrapper = new LambdaQueryWrapper<>();
        apiTokenQueryWrapper.eq(ApiToken::getTokenType, tokenType);
        return apiTokenMapper.selectOne(apiTokenQueryWrapper);
    }

//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public boolean deleteApiKey(String apiKey) {
//        QueryWrapper<ApiToken> apiTokenQueryWrapper = new QueryWrapper<ApiToken>();
//        apiTokenQueryWrapper.eq("api_key", apiKey);
//        int deleteapiToken = apiTokenMapper.delete(apiTokenQueryWrapper);
//
//        return deleteapiToken > 0;
//    }
//
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public AjaxResult deleteApiKeys(List<String> apiKeys) {
//        // 参数校验
//        if (CollectionUtils.isEmpty(apiKeys)) {
//            return AjaxResult.error("缺少要删除的 apiKey 列表");
//        }
//
//        // 构造查询条件
//        LambdaQueryWrapper<ApiToken> wrapper = new LambdaQueryWrapper<>();
//        wrapper.in(ApiToken::getApiKey, apiKeys);
//
//        // 查询是否存在这些记录（可选：用于审计或防止误删）
//        List<ApiToken> existingTokens = apiTokenMapper.selectList(wrapper);
//        if (existingTokens.isEmpty()) {
//            return AjaxResult.error("未找到指定的 API Key 记录");
//        }
//
//        // 执行删除
//        int deletedCount;
//        try {
//            deletedCount = apiTokenMapper.delete(wrapper);
//        } catch (Exception e) {
//            log.error("数据库删除失败", e);
//            throw new RuntimeException("删除操作失败", e);
//        }
//
//        return AjaxResult.success(String.valueOf(deletedCount), "删除成功，共删除 " + deletedCount + " 条记录");
//    }
}
